package com.mazaiting.emotion.view

import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.LinearLayout
import com.mazaiting.emotion.R
import com.mazaiting.emotion.util.DisplayUtil
import java.util.*

/***
 *
 *
 * __----~~~~~~~~~~~------___
 * .  .   ~~//====......          __--~ ~~
 * -.            \_|//     |||\\  ~~~~~~::::... /~
 * ___-==_       _-~o~  \/    |||  \\            _/~~-
 * __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 * _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 * .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 * '         ~-|      /|    |-~\~~       __--~~
 * |-~~-_/ |    |   ~\_   _-~            /\
 * /  \     \__   \/~                \__
 * _--~ _/ | .-~~____--~-/                  ~~==.
 * ((->/~   '.|||' -_|    ~~-/ ,              . _||
 * -_     ~\      ~~---l__i__i__i--~~_/
 * _-~-__   ~)  \--______________--~~
 * //.-~~~-~_--~- |-------~~~~~~~~
 * //.-~~~--\
 * 神兽保佑
 * 代码无BUG!
 * @author mazaiting
 * @date 2019-08-08
 * @description 指示器布局
 */
class IndicatorView : LinearLayout {

    companion object {
        /**
         * 指示器大小
         */
        private const val SIZE = 6.0f
        /**
         * 外边距大小
         */
        private const val MARGIN_SIZE = 15.0f
    }

    /**
     * 上下文
     */
    private var mContext: Context? = null
    /**
     * 指示器大小
     */
    private var mPointSize: Int = 6
    /**
     * 外边距
     */
    private var mMarginLeft: Int = 15
    /**
     * 所有指示器集合
     */
    private var mImageViews: ArrayList<View>? = null

    constructor(context: Context) : this(context, null)

    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)

    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        mContext = context
        // 获取指示器大小
        mPointSize = DisplayUtil.dp2px(context, SIZE)
        // 获取外边距
        mMarginLeft = DisplayUtil.dp2px(context, MARGIN_SIZE)
    }

    /**
     * 初始化指示器
     * @param count 指示器数目
     */
    fun initIndicator(count: Int) {
        // 创建指示器集合
        mImageViews = ArrayList()
        // 移除所有视图
        this.removeAllViews()
        // 线性布局参数
        var lp: LayoutParams
        // 遍历
        for (i in 0 until count) {
            // 创建 View
            val view = View(mContext)
            // 创建布局参数
            lp = LayoutParams(mPointSize, mPointSize)
            // 设置左边距
            if (0 != i) lp.leftMargin = mMarginLeft
            // 设置布局参数
            view.layoutParams = lp
            // 设置背景资源
            view.setBackgroundResource(
                if (0 == i) R.drawable.shape_bg_indicator_point_select
                else R.drawable.shape_bg_indicator_point_nomal
            )
            // 添加到集合
            mImageViews?.add(view)
            this.addView(view)
        }
    }

    /**
     * 页面移动时切换指示器
     */
    fun toNext(startPosition: Int, nextPosition: Int) {
        var start = startPosition
        var next = nextPosition
        // 检测位置
        if (start < 0 || next < 0 || next == start) {
            start = 0
            next = 0
        }
        // 获取开始视图
        val startView = mImageViews?.get(start)
        // 获取下一个视图
        val nextView = mImageViews?.get(next)
        // 设置背景
        startView?.setBackgroundResource(R.drawable.shape_bg_indicator_point_nomal)
        // 设置背景
        nextView?.setBackgroundResource(R.drawable.shape_bg_indicator_point_select)
    }

}